Add gbfreadbuf to simplify object storage.
authorRobert Lipe <robertlipe@gpsbabel.org>
Mon, 9 Dec 2019 01:10:19 +0000 (19:10 -0600)
committerRobert Lipe <robertlipe@gpsbabel.org>
Mon, 9 Dec 2019 01:10:19 +0000 (19:10 -0600)
gbfile.cc
gbfile.h

index 71210f0d13c917e2381884a4dcc3d319b008d1fb..51fd6a282c5bb44b2e0d7fa1d607fa1efef99d74 100644 (file)
--- a/gbfile.cc
+++ b/gbfile.cc
@@ -692,8 +692,8 @@ gbfread(void* buf, const gbsize_t size, const gbsize_t members, gbfile* file)
   }
   return file->fileread(buf, size, members, file);
 }
-
 // This probably makes an unnecessary alloc/copy, but keeps the above (kinda
+
 // goofy) calling signature.
 gbsize_t
 gbfread(QString& buf, const gbsize_t size, 
@@ -706,6 +706,18 @@ gbfread(QString& buf, const gbsize_t size,
   return retval;
 }
 
+QByteArray gbfreadbuf(gbsize_t size, gbfile* file) {
+  QByteArray tmp;
+  tmp.resize(size);
+  gbsize_t nbytes = gbfread(tmp.data(), 1, size, file);
+
+  if (nbytes != size) {
+    Fatal() << file->module << "Attempted to read " << size <<
+    "bytes, but only " << nbytes << "were available.";
+  }
+  return tmp;
+}
+
 /*
  * gbvfprintf: (as vfprintf)
  */
index 36ebad88dce150f1e0e464711a4d84131b637dfc..ad8f3fc9907cfe7f53c9ac8cd192dce7f7dd97fc 100644 (file)
--- a/gbfile.h
+++ b/gbfile.h
@@ -93,6 +93,8 @@ void gbfclose(gbfile* file);
 
 gbsize_t gbfread(void* buf, gbsize_t size, gbsize_t members, gbfile* file);
 gbsize_t gbfread(QString& buf, gbsize_t size, gbsize_t members, gbfile* file);
+// Convenience wrapper for above, but ignoring the possibility of endian swapping.
+QByteArray gbfreadbuf(gbsize_t size, gbfile* file);
 int gbfgetc(gbfile* file);
 QString gbfgets(char* buf, int len, gbfile* file);